<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.10.0" />
<title>Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main API documentation</title>
<meta name="description" content="This is an example of a panel (type=&#34;static&#34;), they will be updated if they are open.
If you need to make a plugin that is updated in the bg then …" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/ir-black.min.css" crossorigin>
<style>
:root {
--highlight-color: #202;
}
html {
scrollbar-face-color: #646464;
scrollbar-base-color: #646464;
scrollbar-3dlight-color: #646464;
scrollbar-highlight-color: #646464;
scrollbar-track-color: #000;
scrollbar-arrow-color: #000;
scrollbar-shadow-color: #646464;
scrollbar-dark-shadow-color: #646464;
}
::-webkit-scrollbar { width: 14px; height: 3px;}
::-webkit-scrollbar-button {
background-color: #000;
height: 3px;}
::-webkit-scrollbar-track {
background-color: #646464;}
::-webkit-scrollbar-track-piece { background-color: #000;}
::-webkit-scrollbar-thumb { height: 50px; background-color: #666; border-radius: 7px;}
::-webkit-scrollbar-corner { background-color: #646464;}
::-webkit-resizer { background-color: #666;}
.flex {
display: flex !important;
}
body {
line-height: 1.5em;
color: #fff;
background-color: #1e1e1e;
font: 14px/1.5 Helvetica, Arial, sans-serif;
margin: 0;
padding: 0;
}
#content {
padding: 20px;
}
#sidebar {
padding: 30px;
overflow: hidden;
}
#sidebar>*:last-child {
margin-bottom: 2cm;
}
.http-server-breadcrumbs {
font-size: 130%;
margin: 0 0 15px 0;
}
#footer {
font-size: .75em;
padding: 5px 30px;
border-top: 1px solid #fff;
text-align: right;
}
#footer p {
margin: 0 0 0 1em;
display: inline-block;
}
#footer p:last-child {
margin-right: 30px;
}
h1,
h2,
h3,
h4,
h5 {
font-weight: 300;
color: #fff;
}
h1 {
font-size: 2.5em;
line-height: 1.1em;
}
h2 {
font-size: 1.75em;
margin: 1em 0 .50em 0;
}
h3 {
font-size: 1.4em;
margin: 25px 0 10px 0;
}
h4 {
margin: 0;
font-size: 105%;
}
h1:target,
h2:target,
h3:target,
h4:target,
h5:target,
h6:target {
background: #1e1e1e;
padding: 0.2em 0;
}
a {
color: #8fd6fc;
text-decoration: none;
transition: color .3s ease-in-out;
}
a:hover {
color: #00a4fc;
}
.title code {
font-weight: bold;
}
h2[id^="header-"] {
margin-top: 2em;
}
.ident {
color: #f6fc85;
}
strong {
color: #8fd6fc;
}
pre code {
background: transparent;
font-size: .8em;
line-height: 1.4em;
}
code {
background: rgba(255, 255, 255, 0.1);
padding: 1px 4px;
overflow-wrap: break-word;
}
h1 code {
background: transparent
}
pre {
background: transparent;
border: 0;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
margin: 1em 0;
padding: 1ex;
}
#http-server-module-list {
display: flex;
flex-flow: column;
}
#http-server-module-list div {
display: flex;
}
#http-server-module-list dt {
min-width: 10%;
}
#http-server-module-list p {
margin-top: 0;
}
.toc ul,
#index {
list-style-type: none;
margin: 0;
padding: 0;
}
#index code {
background: transparent;
}
#index h3 {
border-bottom: 1px solid #ddd;
}
#index ul {
padding: 0;
}
#index h4 {
margin-top: .6em;
font-weight: bold;
}
/* Make TOC lists have 2+ columns when viewport is wide enough.
Assuming ~20-character identifiers and ~30% wide sidebar. */
@media (min-width: 200ex) {
#index .two-column {
column-count: 2
}
}
@media (min-width: 300ex) {
#index .two-column {
column-count: 3
}
}
dl {
margin-bottom: 2em;
}
dl dl:last-child {
margin-bottom: 4em;
}
dd {
margin: 0 0 1em 3em;
}
#header-classes+dl>dd {
margin-bottom: 3em;
}
dd dd {
margin-left: 2em;
}
dd p {
margin: 10px 0;
}
.name {
background: #000;
font-weight: bold;
font-size: .85em;
padding: 5px 10px;
display: inline-block;
min-width: 40%;
}
.name:hover {
background: #0b0b0b;
}
dt:target .name {
background: var(--highlight-color);
}
.name>span:first-child {
white-space: nowrap;
}
.name.class>span:nth-child(2) {
margin-left: .4em;
}
.inherited {
color: #999;
border-left: 5px solid #eee;
padding-left: 1em;
}
.inheritance em {
font-style: normal;
font-weight: bold;
}
.pydefname {
color: #f90;
}
/* Docstrings titles, e.g. in numpydoc format */
.desc h2 {
font-weight: 400;
font-size: 1.25em;
}
.desc h3 {
font-size: 1em;
}
.desc dt code {
background: inherit;
/* Don't grey-back parameters */
}
.source summary,
.git-link-div {
color: #666;
text-align: right;
font-weight: 400;
font-size: .8em;
text-transform: uppercase;
}
.source summary>* {
white-space: nowrap;
cursor: pointer;
}
.git-link {
color: inherit;
margin-left: 1em;
}
.source pre {
max-height: 500px;
overflow: auto;
margin: 0;
}
.source pre code {
font-size: 12px;
overflow: visible;
}
.hlist {
list-style: none;
}
.hlist li {
display: inline;
}
.hlist li:after {
content: ',\2002';
}
.hlist li:last-child:after {
content: none;
}
.hlist .hlist {
display: inline;
padding-left: 1em;
}
img {
max-width: 100%;
}
td {
padding: 0 .5em;
}
.admonition {
padding: .1em .5em;
margin-bottom: 1em;
}
.admonition-title {
font-weight: bold;
}
.admonition.note,
.admonition.info,
.admonition.important {
background: #00a;
}
.admonition.todo,
.admonition.versionadded,
.admonition.tip,
.admonition.hint {
background: #050;
}
.admonition.warning,
.admonition.versionchanged,
.admonition.deprecated {
background: #ec0;
}
.admonition.error,
.admonition.danger,
.admonition.caution {
background: #c20010;
}
p {
color: #fff;
}
</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main</code></h1>
</header>
<section id="section-intro">
<p>This is an example of a panel (type="static"), they will be updated if they are open.
If you need to make a plugin that is updated in the bg then check the Plugin example!</p>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">&#34;&#34;&#34;
This is an example of a panel (type=&#34;static&#34;), they will be updated if they are open.
If you need to make a plugin that is updated in the bg then check the Plugin example!
&#34;&#34;&#34;


from plugins.plugin import PluginInformation
from src.logger import print

PluginInfo = PluginInformation(
    name=&#34;ScreenCapturePlacement&#34;, # This needs to match the folder name under plugins (this would mean plugins\Panel\main.py)
    description=&#34;Provides an easy way to place the screen capture\nwindow on the correct spot.&#34;,
    version=&#34;0.1&#34;,
    author=&#34;Tumppi066&#34;,
    url=&#34;https://github.com/Tumppi066/Euro-Truck-Simulator-2-Lane-Assist&#34;,
    type=&#34;static&#34;, # = Panel
    disableLoop=True # This panel will disable all other plugins when it&#39;s open
)

import tkinter as tk
from tkinter import ttk
import src.helpers as helpers
import src.mainUI as mainUI
import src.variables as variables
import src.settings as settings
import os
import screeninfo

global detectionmethod
if &#34;NavigationDetectionV2&#34; in settings.GetSettings(&#34;Plugins&#34;, &#34;Enabled&#34;, value=[]):
    detectionmethod = &#34;nav&#34;
elif &#34;UFLDLaneDetection&#34; in settings.GetSettings(&#34;Plugins&#34;, &#34;Enabled&#34;, value=[]):
    detectionmethod = &#34;ufld&#34;
else:
    detectionmethod = &#34;lstr&#34;


def GetTitlebarHeight():
    global titlebarHeight
    
    # Create a tkinter window
    root = tk.Tk()
    root.geometry(&#34;{}x{}+{}+{}&#34;.format(0, 0, 0, 0))

    root.update()

    # Get the y-coordinate of the top-level window
    toplevel_y = root.winfo_rooty()

    # Get the y-coordinate of the Tk object
    root_y = root.winfo_y()

    # Calculate the height of the titlebar
    titlebarHeight = toplevel_y - root_y

    # Print the height of the titlebar
    print(f&#34;The height of the titlebar is {titlebarHeight} pixels&#34;)
    
    # Destroy the window
    root.destroy()
    

def CreateWindow(x,y,w,h):
    global root
    global label
    
    try:
        root.destroy()
    except: pass
    
    
    root = tk.Tk()
    root.config(bg=&#34;black&#34;, border=0)
    try:
        root.geometry(&#34;{}x{}+{}+{}&#34;.format(w, h, x, y))
    except:
        root.geometry(&#34;{}x{}+{}+{}&#34;.format(1280, 720, 0, 0))

    canvas = tk.Canvas(root, width=600, height=520, border=0, highlightthickness=0)
    canvas.config(bg=&#34;black&#34;)
    canvas.grid_propagate(0) # Don&#39;t fit the canvast to the widgets
    canvas.pack_propagate(0)
    canvas.pack(anchor=&#34;center&#34;, expand=False)


    label = tk.Label(canvas, text=&#34;This is a test&#34;, font=(&#34;Roboto&#34;, 26, &#34;bold&#34;), bg=&#34;black&#34;, fg=&#34;white&#34;)
    label.pack(anchor=&#34;center&#34;, expand=False, pady=30)

    # root.overrideredirect(True)
    # root.wm_attributes(&#34;-disabled&#34;, True)
    
    if settings.GetSettings(&#34;ScreenCapturePlacement&#34;, &#34;compatibilityMode&#34;) == False:
        root.wm_attributes(&#34;-transparentcolor&#34;, &#34;black&#34;)
        root.bind(&#34;&lt;FocusOut&gt;&#34;, lambda e: LostFocus())
        
    root.bind(&#34;&lt;Configure&gt;&#34;, lambda e: OnWindowLocationChange())

    root.update()

def SavePickerSettings(category):
    GetTitlebarHeight()
    x,y,w,h = root.winfo_x(), root.winfo_y(), root.winfo_width(), root.winfo_height()
    root.destroy()
    
    settings.CreateSettings(category, &#34;x&#34;, x)
    settings.CreateSettings(category, &#34;y&#34;, y + titlebarHeight)
    settings.CreateSettings(category, &#34;width&#34;, w)
    settings.CreateSettings(category, &#34;height&#34;, h)
    
    try:
        import plugins.BetterCamScreenCapture.main as bettercam
        bettercam.CreateCamera()
        
        import plugins.MSSScreenCapture.main as mss
        mss.CreateCamera()
    except:
        pass
    
    pass

def OnWindowLocationChange():
    label.config(text=&#34;x: {} y: {}\nw: {} h: {}&#34;.format(root.winfo_x(), root.winfo_y(), root.winfo_width(), root.winfo_height()))
    

def LostFocus():
    CreateWindow(root.winfo_x(), root.winfo_y(), root.winfo_width(), root.winfo_height())


class UI():
    try: # The panel is in a try loop so that the logger can log errors if they occur
        
        def __init__(self, master) -&gt; None:
            self.master = master # &#34;master&#34; is the mainUI window
            self.once = False
            self.exampleFunction()
        
        def destroy(self):
            self.done = True
            self.root.destroy()
            del self

        
        def exampleFunction(self):
            
            try:
                self.root.destroy() # Load the UI each time this plugin is called
            except: pass
            
            self.root = tk.Canvas(self.master, width=600, height=520)
            self.root.grid_propagate(0) # Don&#39;t fit the canvast to the widgets
            self.root.pack_propagate(0)
            
            # Get the screen size
            try:
                width = int(settings.GetSettings(&#34;bettercam&#34;, &#34;width&#34;))
                height = int(settings.GetSettings(&#34;bettercam&#34;, &#34;height&#34;))
                x = int(settings.GetSettings(&#34;bettercam&#34;, &#34;x&#34;))
                y = int(settings.GetSettings(&#34;bettercam&#34;, &#34;y&#34;))
            except:
                screen = screeninfo.get_monitors()[0]
                height = int(screen.height / 2)
                width = int(height * 16 / 9)
                x = 100
                y = 100
            
            helpers.MakeButton(self.root, &#34;Enable Picker&#34;, lambda: CreateWindow(x,y,width, height), 0,0, padx=10, pady=10, width=15)
            helpers.MakeLabel(self.root, &#34;Set this to your screencapture category (default &#39;bettercam&#39;):&#34;, 1,0, font=(&#34;Roboto&#34;, 8), padx=30, pady=10)
            
            entryVar = tk.StringVar()
            entryVar.set(&#34;bettercam&#34;)
            entry = ttk.Entry(self.root, width=15, textvariable=entryVar)
            entry.grid(row=2, column=0, padx=10, pady=10)
            
            helpers.MakeButton(self.root, &#34;Save Settings&#34;, lambda: SavePickerSettings(entryVar.get()), 4,0, padx=10, pady=10, width=15)
            helpers.MakeButton(self.root, &#34;Disable Picker&#34;, lambda: root.destroy(), 5,0, padx=10, pady=10, width=15)
            
            helpers.MakeLabel(self.root, &#34;Compatibility mode is for older versions of Windows\nwhere the transparent background doesn&#39;t work.\nCreate the window again after toggling!&#34;, 6,0, font=(&#34;Roboto&#34;, 8), padx=30, pady=10)
            helpers.MakeCheckButton(self.root, &#34;Compatibility mode&#34;, &#34;ScreenCapturePlacement&#34;, &#34;compatibilityMode&#34;, 7,0, width=30, callback=lambda: LostFocus())
            
            global detectionmethod
            if &#34;NavigationDetectionV2&#34; in settings.GetSettings(&#34;Plugins&#34;, &#34;Enabled&#34;):
                detectionmethod = &#34;nav&#34;
            elif &#34;UFLDLaneDetection&#34; in settings.GetSettings(&#34;Plugins&#34;, &#34;Enabled&#34;):
                detectionmethod = &#34;ufld&#34;
            else:
                detectionmethod = &#34;lstr&#34;
            def checkdetection():
                if detectionmethod == &#34;nav&#34;:
                    mainUI.switchSelectedPlugin(&#34;plugins.NavDetectionSetup.main&#34;)
                elif detectionmethod == &#34;ufld&#34;:
                    mainUI.switchSelectedPlugin(&#34;plugins.UFLDInstaller.main&#34;)
                else:
                    variables.RELOAD = True

            if detectionmethod == &#34;nav&#34;:
                buttontext = &#34;Navigation Detection Setup&#34;
                helpers.MakeButton(self.root, buttontext, checkdetection, 8,0, padx=10, pady=10, width=30)
            elif detectionmethod == &#34;ufld&#34;:
                buttontext = &#34;UFLD Installer&#34;
                helpers.MakeButton(self.root, buttontext, checkdetection, 8,0, padx=10, pady=10, width=30)
            else:
                buttontext = &#34;Finish&#34;
                helpers.MakeButton(self.root, buttontext, checkdetection, 8,0, padx=10, pady=10, width=15)
            
            self.root.pack(anchor=&#34;center&#34;, expand=False)
            self.root.update()
        
        def updateOnce(self):
            self.once = True
        
        def update(self, data): # When the panel is open this function is called each frame 
            self.root.update()
            try:
                root.update()
            except: pass
    
    
    except Exception as ex:
        print(ex.args)</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-functions">Functions</h2>
<dl>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.CreateWindow"><code class="name flex">
<span>def <span class="ident">CreateWindow</span></span>(<span>x, y, w, h)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def CreateWindow(x,y,w,h):
    global root
    global label
    
    try:
        root.destroy()
    except: pass
    
    
    root = tk.Tk()
    root.config(bg=&#34;black&#34;, border=0)
    try:
        root.geometry(&#34;{}x{}+{}+{}&#34;.format(w, h, x, y))
    except:
        root.geometry(&#34;{}x{}+{}+{}&#34;.format(1280, 720, 0, 0))

    canvas = tk.Canvas(root, width=600, height=520, border=0, highlightthickness=0)
    canvas.config(bg=&#34;black&#34;)
    canvas.grid_propagate(0) # Don&#39;t fit the canvast to the widgets
    canvas.pack_propagate(0)
    canvas.pack(anchor=&#34;center&#34;, expand=False)


    label = tk.Label(canvas, text=&#34;This is a test&#34;, font=(&#34;Roboto&#34;, 26, &#34;bold&#34;), bg=&#34;black&#34;, fg=&#34;white&#34;)
    label.pack(anchor=&#34;center&#34;, expand=False, pady=30)

    # root.overrideredirect(True)
    # root.wm_attributes(&#34;-disabled&#34;, True)
    
    if settings.GetSettings(&#34;ScreenCapturePlacement&#34;, &#34;compatibilityMode&#34;) == False:
        root.wm_attributes(&#34;-transparentcolor&#34;, &#34;black&#34;)
        root.bind(&#34;&lt;FocusOut&gt;&#34;, lambda e: LostFocus())
        
    root.bind(&#34;&lt;Configure&gt;&#34;, lambda e: OnWindowLocationChange())

    root.update()</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.GetTitlebarHeight"><code class="name flex">
<span>def <span class="ident">GetTitlebarHeight</span></span>(<span>)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def GetTitlebarHeight():
    global titlebarHeight
    
    # Create a tkinter window
    root = tk.Tk()
    root.geometry(&#34;{}x{}+{}+{}&#34;.format(0, 0, 0, 0))

    root.update()

    # Get the y-coordinate of the top-level window
    toplevel_y = root.winfo_rooty()

    # Get the y-coordinate of the Tk object
    root_y = root.winfo_y()

    # Calculate the height of the titlebar
    titlebarHeight = toplevel_y - root_y

    # Print the height of the titlebar
    print(f&#34;The height of the titlebar is {titlebarHeight} pixels&#34;)
    
    # Destroy the window
    root.destroy()</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.LostFocus"><code class="name flex">
<span>def <span class="ident">LostFocus</span></span>(<span>)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def LostFocus():
    CreateWindow(root.winfo_x(), root.winfo_y(), root.winfo_width(), root.winfo_height())</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.OnWindowLocationChange"><code class="name flex">
<span>def <span class="ident">OnWindowLocationChange</span></span>(<span>)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def OnWindowLocationChange():
    label.config(text=&#34;x: {} y: {}\nw: {} h: {}&#34;.format(root.winfo_x(), root.winfo_y(), root.winfo_width(), root.winfo_height()))</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.SavePickerSettings"><code class="name flex">
<span>def <span class="ident">SavePickerSettings</span></span>(<span>category)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def SavePickerSettings(category):
    GetTitlebarHeight()
    x,y,w,h = root.winfo_x(), root.winfo_y(), root.winfo_width(), root.winfo_height()
    root.destroy()
    
    settings.CreateSettings(category, &#34;x&#34;, x)
    settings.CreateSettings(category, &#34;y&#34;, y + titlebarHeight)
    settings.CreateSettings(category, &#34;width&#34;, w)
    settings.CreateSettings(category, &#34;height&#34;, h)
    
    try:
        import plugins.BetterCamScreenCapture.main as bettercam
        bettercam.CreateCamera()
        
        import plugins.MSSScreenCapture.main as mss
        mss.CreateCamera()
    except:
        pass
    
    pass</code></pre>
</details>
</dd>
</dl>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI"><code class="flex name class">
<span>class <span class="ident">UI</span></span>
<span>(</span><span>master)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class UI():
    try: # The panel is in a try loop so that the logger can log errors if they occur
        
        def __init__(self, master) -&gt; None:
            self.master = master # &#34;master&#34; is the mainUI window
            self.once = False
            self.exampleFunction()
        
        def destroy(self):
            self.done = True
            self.root.destroy()
            del self

        
        def exampleFunction(self):
            
            try:
                self.root.destroy() # Load the UI each time this plugin is called
            except: pass
            
            self.root = tk.Canvas(self.master, width=600, height=520)
            self.root.grid_propagate(0) # Don&#39;t fit the canvast to the widgets
            self.root.pack_propagate(0)
            
            # Get the screen size
            try:
                width = int(settings.GetSettings(&#34;bettercam&#34;, &#34;width&#34;))
                height = int(settings.GetSettings(&#34;bettercam&#34;, &#34;height&#34;))
                x = int(settings.GetSettings(&#34;bettercam&#34;, &#34;x&#34;))
                y = int(settings.GetSettings(&#34;bettercam&#34;, &#34;y&#34;))
            except:
                screen = screeninfo.get_monitors()[0]
                height = int(screen.height / 2)
                width = int(height * 16 / 9)
                x = 100
                y = 100
            
            helpers.MakeButton(self.root, &#34;Enable Picker&#34;, lambda: CreateWindow(x,y,width, height), 0,0, padx=10, pady=10, width=15)
            helpers.MakeLabel(self.root, &#34;Set this to your screencapture category (default &#39;bettercam&#39;):&#34;, 1,0, font=(&#34;Roboto&#34;, 8), padx=30, pady=10)
            
            entryVar = tk.StringVar()
            entryVar.set(&#34;bettercam&#34;)
            entry = ttk.Entry(self.root, width=15, textvariable=entryVar)
            entry.grid(row=2, column=0, padx=10, pady=10)
            
            helpers.MakeButton(self.root, &#34;Save Settings&#34;, lambda: SavePickerSettings(entryVar.get()), 4,0, padx=10, pady=10, width=15)
            helpers.MakeButton(self.root, &#34;Disable Picker&#34;, lambda: root.destroy(), 5,0, padx=10, pady=10, width=15)
            
            helpers.MakeLabel(self.root, &#34;Compatibility mode is for older versions of Windows\nwhere the transparent background doesn&#39;t work.\nCreate the window again after toggling!&#34;, 6,0, font=(&#34;Roboto&#34;, 8), padx=30, pady=10)
            helpers.MakeCheckButton(self.root, &#34;Compatibility mode&#34;, &#34;ScreenCapturePlacement&#34;, &#34;compatibilityMode&#34;, 7,0, width=30, callback=lambda: LostFocus())
            
            global detectionmethod
            if &#34;NavigationDetectionV2&#34; in settings.GetSettings(&#34;Plugins&#34;, &#34;Enabled&#34;):
                detectionmethod = &#34;nav&#34;
            elif &#34;UFLDLaneDetection&#34; in settings.GetSettings(&#34;Plugins&#34;, &#34;Enabled&#34;):
                detectionmethod = &#34;ufld&#34;
            else:
                detectionmethod = &#34;lstr&#34;
            def checkdetection():
                if detectionmethod == &#34;nav&#34;:
                    mainUI.switchSelectedPlugin(&#34;plugins.NavDetectionSetup.main&#34;)
                elif detectionmethod == &#34;ufld&#34;:
                    mainUI.switchSelectedPlugin(&#34;plugins.UFLDInstaller.main&#34;)
                else:
                    variables.RELOAD = True

            if detectionmethod == &#34;nav&#34;:
                buttontext = &#34;Navigation Detection Setup&#34;
                helpers.MakeButton(self.root, buttontext, checkdetection, 8,0, padx=10, pady=10, width=30)
            elif detectionmethod == &#34;ufld&#34;:
                buttontext = &#34;UFLD Installer&#34;
                helpers.MakeButton(self.root, buttontext, checkdetection, 8,0, padx=10, pady=10, width=30)
            else:
                buttontext = &#34;Finish&#34;
                helpers.MakeButton(self.root, buttontext, checkdetection, 8,0, padx=10, pady=10, width=15)
            
            self.root.pack(anchor=&#34;center&#34;, expand=False)
            self.root.update()
        
        def updateOnce(self):
            self.once = True
        
        def update(self, data): # When the panel is open this function is called each frame 
            self.root.update()
            try:
                root.update()
            except: pass
    
    
    except Exception as ex:
        print(ex.args)</code></pre>
</details>
<h3>Methods</h3>
<dl>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI.destroy"><code class="name flex">
<span>def <span class="ident">destroy</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def destroy(self):
    self.done = True
    self.root.destroy()
    del self</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI.exampleFunction"><code class="name flex">
<span>def <span class="ident">exampleFunction</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def exampleFunction(self):
    
    try:
        self.root.destroy() # Load the UI each time this plugin is called
    except: pass
    
    self.root = tk.Canvas(self.master, width=600, height=520)
    self.root.grid_propagate(0) # Don&#39;t fit the canvast to the widgets
    self.root.pack_propagate(0)
    
    # Get the screen size
    try:
        width = int(settings.GetSettings(&#34;bettercam&#34;, &#34;width&#34;))
        height = int(settings.GetSettings(&#34;bettercam&#34;, &#34;height&#34;))
        x = int(settings.GetSettings(&#34;bettercam&#34;, &#34;x&#34;))
        y = int(settings.GetSettings(&#34;bettercam&#34;, &#34;y&#34;))
    except:
        screen = screeninfo.get_monitors()[0]
        height = int(screen.height / 2)
        width = int(height * 16 / 9)
        x = 100
        y = 100
    
    helpers.MakeButton(self.root, &#34;Enable Picker&#34;, lambda: CreateWindow(x,y,width, height), 0,0, padx=10, pady=10, width=15)
    helpers.MakeLabel(self.root, &#34;Set this to your screencapture category (default &#39;bettercam&#39;):&#34;, 1,0, font=(&#34;Roboto&#34;, 8), padx=30, pady=10)
    
    entryVar = tk.StringVar()
    entryVar.set(&#34;bettercam&#34;)
    entry = ttk.Entry(self.root, width=15, textvariable=entryVar)
    entry.grid(row=2, column=0, padx=10, pady=10)
    
    helpers.MakeButton(self.root, &#34;Save Settings&#34;, lambda: SavePickerSettings(entryVar.get()), 4,0, padx=10, pady=10, width=15)
    helpers.MakeButton(self.root, &#34;Disable Picker&#34;, lambda: root.destroy(), 5,0, padx=10, pady=10, width=15)
    
    helpers.MakeLabel(self.root, &#34;Compatibility mode is for older versions of Windows\nwhere the transparent background doesn&#39;t work.\nCreate the window again after toggling!&#34;, 6,0, font=(&#34;Roboto&#34;, 8), padx=30, pady=10)
    helpers.MakeCheckButton(self.root, &#34;Compatibility mode&#34;, &#34;ScreenCapturePlacement&#34;, &#34;compatibilityMode&#34;, 7,0, width=30, callback=lambda: LostFocus())
    
    global detectionmethod
    if &#34;NavigationDetectionV2&#34; in settings.GetSettings(&#34;Plugins&#34;, &#34;Enabled&#34;):
        detectionmethod = &#34;nav&#34;
    elif &#34;UFLDLaneDetection&#34; in settings.GetSettings(&#34;Plugins&#34;, &#34;Enabled&#34;):
        detectionmethod = &#34;ufld&#34;
    else:
        detectionmethod = &#34;lstr&#34;
    def checkdetection():
        if detectionmethod == &#34;nav&#34;:
            mainUI.switchSelectedPlugin(&#34;plugins.NavDetectionSetup.main&#34;)
        elif detectionmethod == &#34;ufld&#34;:
            mainUI.switchSelectedPlugin(&#34;plugins.UFLDInstaller.main&#34;)
        else:
            variables.RELOAD = True

    if detectionmethod == &#34;nav&#34;:
        buttontext = &#34;Navigation Detection Setup&#34;
        helpers.MakeButton(self.root, buttontext, checkdetection, 8,0, padx=10, pady=10, width=30)
    elif detectionmethod == &#34;ufld&#34;:
        buttontext = &#34;UFLD Installer&#34;
        helpers.MakeButton(self.root, buttontext, checkdetection, 8,0, padx=10, pady=10, width=30)
    else:
        buttontext = &#34;Finish&#34;
        helpers.MakeButton(self.root, buttontext, checkdetection, 8,0, padx=10, pady=10, width=15)
    
    self.root.pack(anchor=&#34;center&#34;, expand=False)
    self.root.update()</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI.update"><code class="name flex">
<span>def <span class="ident">update</span></span>(<span>self, data)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def update(self, data): # When the panel is open this function is called each frame 
    self.root.update()
    try:
        root.update()
    except: pass</code></pre>
</details>
</dd>
<dt id="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI.updateOnce"><code class="name flex">
<span>def <span class="ident">updateOnce</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def updateOnce(self):
    self.once = True</code></pre>
</details>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement" href="index.html">Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement</a></code></li>
</ul>
</li>
<li><h3><a href="#header-functions">Functions</a></h3>
<ul class="">
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.CreateWindow" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.CreateWindow">CreateWindow</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.GetTitlebarHeight" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.GetTitlebarHeight">GetTitlebarHeight</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.LostFocus" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.LostFocus">LostFocus</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.OnWindowLocationChange" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.OnWindowLocationChange">OnWindowLocationChange</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.SavePickerSettings" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.SavePickerSettings">SavePickerSettings</a></code></li>
</ul>
</li>
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI">UI</a></code></h4>
<ul class="">
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI.destroy" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI.destroy">destroy</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI.exampleFunction" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI.exampleFunction">exampleFunction</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI.update" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI.update">update</a></code></li>
<li><code><a title="Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI.updateOnce" href="#Euro-Truck-Simulator-2-Lane-Assist.plugins.ScreenCapturePlacement.main.UI.updateOnce">updateOnce</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.10.0</a>.</p>
</footer>
</body>
</html>